package com.guaoran.interview.before.jd;




/**
 * @author : guCheng
 * @title : 集合 
 * @Description : 
 * 	 
 * @date :2018年3月21日上午9:55:57
 */
public class 集合 {
	/**
	 * 集合框架：Collection
	  	list:有序，可重复
	  		1.ArrayList:采用数组结构，线程不安全：查询快，增删慢
	  		2.LinkedList:底部采用hash链表结构，线程不安全，增删快，查询慢。
	  		3.Vector:采用数组结构，线程安全，查询快，增删慢。
	  	set:无序，不可重复
	  		1.HashSet：底部采用hash表结构，线程不安全，通过计算hashcode，和equals来判断元素是否一致。
	  		2.LinkedHashSet
	  	Queue:队列
	  		
	  	
	 */
	
	
	/**
	 * Map：key/value存储数据：键不允许键重复,但允许值重复。
	 	1.HashMap:单项链表；散列值，线程不安全，允许key和value为空，不过key只能一次为空，否则会覆盖，entry
	 		在多线程情况下,会造成环形链表,导致一致获取不到next为空的时候,便造成死循环.
	 	2.LinkedHashMap:双向链表，，有顺序。线程不安全，
	 	3.ConcurrentHashMap：线程安全的，底部采用分段锁，使用segment锁进行分段，下面存放HashEntry桶存放数据，
	 		segment是reetrantLook的子类，具有可重入锁，
	 		ConcurrentHashMap是由Segment数组结构和HashEntry数组结构组成。
	 		Segment是一种可重入锁ReentrantLock，在ConcurrentHashMap里扮演锁的角色，HashEntry则用于存储键值对数据。
	 		一个ConcurrentHashMap里包含一个Segment数组，Segment的结构和HashMap类似，是一种数组和链表结构， 
	 		一个Segment里包含一个HashEntry数组，每个HashEntry是一个链表结构的元素， 每个Segment守护者一个HashEntry数组里的元素,
	 		当对HashEntry数组的数据进行修改时，必须首先获得它对应的Segment锁。
	   
	   HashTable：散列值，不允许key和value为空，否则抛出空指针。
	   	线程安全的，效率低，
	   	与concurrentHashMap比较的话，concurrentHashMap采用分段时锁，只是锁住了某个部分，而HashTable是锁住了全部
	   		锁住某个segment，其他线程不用这个segment的话，是不需要等待的，因此提高了性能，
	   	
	 	
	 	
	 	
	 	
	 	
	 */
}
